import router from './router'
import {useUserStore} from './store/user.ts'
import {usePermissionStore} from './store/permission.ts'
import {useAppStore} from './store/app.ts'
import {nextTick} from "vue";
import {gsap} from "gsap";
// 白名单
const whiteList = ['/login']
/**
 * 路由前置守卫
 */
router.beforeEach(async (to, from, next) => {
  console.warn('from',from)
  let userStore = useUserStore()
  let permissionStore = usePermissionStore()
  let appStore = useAppStore()

  // 存在 token ，进入主页
  // 快捷访问
  if (userStore.token) {
    // 1、用户已登陆，则不允许进入login
    if (to.path === '/login') {
      next('/')
    } else {
      // 判断用户资料是否获取
      // 若不存在用户信息，则需要获取用户信息
      if (!userStore.hasUserInfo) {
        // 触发获取用户信息的 action
        const { permission } = await userStore.getUserInfo()
        // 处理用户权限，筛选出需要添加的权限
        const filterRoutesRes = await permissionStore.filterRoutes(permission.menus)
        // 利用 addRoute 循环添加
        filterRoutesRes.forEach((item) => {
          router.addRoute(item)
        })
        // 添加完动态路由之后，需要在进行一次主动跳转，因为只有进行了主动跳转才能生效
        return next(to.path)
      }else{
        appStore.changeLoading(true)
        next()
      }
    }
  } else {
    //2、用户未登录，只允许进入login
    // 没有token的情况下，可以进入白名单
    if (whiteList.indexOf(to.path) > -1) {
      next()
    } else {
      next('/login')
    }
  }
})

router.afterEach(async () => {
  await nextTick()
  gsap.fromTo('.app-main-box', { opacity: 0 ,x: 350},{ duration: 0.55, x:0, opacity:1 })

  let appStore = useAppStore()
  //监控懒加载文件全部加载完毕后的事件，用于控住全局加载loading
  // appStore.loading = false;
  appStore.changeLoading(false)
})
